package com.ck.common.service;

import com.ck.exception.ServiceException;
import com.ck.model.common.User;
import com.ck.model.common.page.PageInfo;
import com.ck.model.common.vo.UserListVO;

import javax.servlet.http.HttpServletRequest;
import java.rmi.ServerException;

/**
 * 用户Service
 *
 * @author dxy
 * @date 2018/6/21 15:22
 */
public interface UserService {
	/**
	 * 保存用户
	 *
	 * @param user    User
	 * @param roleIds 角色IDS
	 * @param request HttpServletRequest
	 */
	void insertUser(User user, String roleIds, HttpServletRequest request) throws ServiceException;

	/**
	 * 修改用户
	 *
	 * @param user    User
	 * @param roleIds 角色IDS
	 * @param request HttpServletRequest
	 */
	void updateUser(User user, String roleIds, HttpServletRequest request);

	/**
	 * 通过用户名获取用户
	 *
	 * @param userName 用户名
	 * @return User(用户)
	 */
	User getUserByUserName(String userName);

	/**
	 * 获取用戶列表
	 *
	 * @param companyCode 商家编码
	 * @param status      状态
	 * @param userName    用户名
	 * @param pageNum     当前页
	 * @param pageSize    条数
	 * @return PageInfo<UserListVO>
	 */
	PageInfo<UserListVO> listUser(String companyCode, Integer status, String userName, Integer pageNum, Integer pageSize) throws ServerException;


	/**
	 * 通过用户ID获取用户
	 *
	 * @param userId 用户ID
	 * @return User(用户)
	 */
	User getUserById(Long userId);

	/**
	 * 根据主键更新
	 * @param user
	 */
	void updateByPrimaryKey(User user);

	/**
	 * 重置密码
	 * @param userId 用户ID
	 * @param password 密码
	 * @param loginUser 当前登录用户
	 * @param remortIP 远程IP
	 * @throws ServiceException
	 */
	void resetPassword(Long userId, String password, User loginUser, String remortIP) throws ServiceException;

    /**
     * 修改密码
     *
     * @param passwordUser 待修改密码的用户对象
     * @param loginUser    当前系统登录的用户
     * @param ip           登录用户ID
     * @return 影响行数
     */
    void updatePassword(User passwordUser, User loginUser, String ip);

    /**
     * 启用禁用用户
     *
     * @param user      待操作的用户
     * @param loginUser 登录的用户
     * @param remortIP  登录用户ip
     * @author linqiang
     */
    void enableDisableUser(User user, User loginUser, String remortIP);
}
